package cn.jolyoulu.common.core.queue.delayed.observer;

import cn.jolyoulu.common.core.queue.delayed.DelayedTaskEntity;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: JolyouLu
 * @Date: 2023/4/15 19:08
 * @Description 延迟任务的主持执行，用于通知、注册、删除观察者
 */
public class DelayedTaskSubject implements Subject {

    private final List<AbstractObserver<?>> observerList = new ArrayList<>();

    /**
     * 注册一个观察者
     * @param observer 观察者
     */
    @Override
    public void registerObserver(AbstractObserver<?> observer) {
        observerList.add(observer);
    }

    /**
     * 删除一个观察者
     * @param observer 观察者
     */
    @Override
    public void removeObserver(AbstractObserver<?> observer) {
        observerList.remove(observer);
    }

    /**
     * 通知观察者
     * @param delayedTask 任务
     */
    @Override
    public void notifyObserver(DelayedTaskEntity<?> delayedTask) {
        for (AbstractObserver<?> item : observerList) {
            Class<?> tClass = delayedTask.getTClass();
            if (tClass.getName().equals(item.getObserverClass().getName())) {
                item.call(delayedTask);
            }
        }
    }
}
